package com.redhat.auth.log.listener;

import java.util.HashMap;
import java.util.Map;

/**
 * Log模块的一些公共日志信息
 * @author lingen.liu
 *
 */
public class LogInfoUtil {
	/**
	 * 系统操作者变量名，一般情况下需保存为线程私有变量
	 */
	public static final String SYSTEM_OPERATOR_KEY = "SYSTEM_OPERATOR";
	/**
	 * 系统名称变量名，一般情况下需保存为全局变量
	 */
	public static final String SYSTEM_NAME_KEY = "SYSTEM_NAME";
	/**
	 * 系统地址（IP）变量名，一般情况下需保存为全局变量
	 */
	public static final String SYSTEM_ADDRESS_KEY = "SYSTEM_ADDRESS";
	/**
	 * 客户地址（IP）变量名，一般情况下需保存为线程私有变量
	 */
	public static final String CLIENT_ADDRESS_KEY = "CLIENT_ADDRESS";
	
	/**
	 * 线程私有的变量-值映射集合
	 */
	private static ThreadLocal<Map<String,Object>> threadLocalVar = new ThreadLocal<Map<String,Object>>() {
        protected synchronized Map<String,Object> initialValue() {
            return new HashMap<String,Object>();
        }
    };
    
    /**
     * 全局变量-值映射集合
     */
    private static Map<String,Object> globalVar = new HashMap<String,Object>();
    
    /**
     * 设置线程私有的变量名称-值对
     * 
     * @param name 变量名
     * @param value 变量值
     * @since 1.0
     */
    public static void setThreadLoalVariable(String name,Object value) {
    	Map<String,Object> map = threadLocalVar.get();
    	map.put(name, value);
    }
    
    /**
     * 获取指定名称的线程私有的变量值
     * 
     * @param name 变量名称
     * @return 指定名称的线程私有的变量值，如果找不到，返回null
     * @since 1.0
     */
    public static Object getThreadLocalVariable(String name) {
    	return threadLocalVar.get().get(name);
    }
    /**
     * 设置全局变量名称-值对
     * 
     * @param name 变量名
     * @param value 变量值
     * @since 1.0
     */
    public static void setGlobalVariable(String name,Object value) {
    	globalVar.put(name, value);
    }
    /**
     * 获取指定名称的全局变量值
     * 
     * @param name 变量名称
     * @return 指定名称的全局变量值，如果找不到，返回null
     * @since 1.0
     */
    public static Object getGlobalVariable(String name) {
    	return globalVar.get(name);
    }
    
    /**
     * 清空指定名称的线程私有的变量值
     * 
     * @param name
     * @since 1.0.1
     */
    public static void clearThreadLocalVariable(String name) {
    	threadLocalVar.get().remove(name);
    }
}